﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using RESTServices.Dominio;
using RESTServices.Persistencia;
using System.Messaging;

namespace RESTServices
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de clase "Reservas" en el código, en svc y en el archivo de configuración a la vez.
    public class Reservas : IReservas
    {
        string rutaCola = @".\private$\reservas";
        private ReservaDAO dao = new ReservaDAO();


        public ReservaAdic CrearRes(Reserva resAcrear)
        {
            return dao.Crear(resAcrear);
        }

        public ReservaAdic ObtenerRes(string codigo)
        {
            return dao.Obtener(int.Parse(codigo));
        }

        public List<ReservaAdic> ListarReservas(string codigo)
        {
            return dao.ListarTodos(int.Parse(codigo));
        }

        public void EliminarReserva(string codigo)
        {
            dao.Eliminar(int.Parse(codigo));
        }


        public ReservaAdic ModificarReserva(Reserva reservaAModificar)
        {
            return dao.Modificar(reservaAModificar);
        }

        public List<Reserva> Listar(string codigo)
        {
            return dao.Listar(int.Parse(codigo));
        }

        public void EnviarReserva(Reserva reservaAnotarse)
        {

            int numero = 0;
            //envia
            if (!MessageQueue.Exists(rutaCola))
                MessageQueue.Create(rutaCola);
            MessageQueue cola = new MessageQueue(rutaCola);
            Message mensaje = new Message(); //cola2.Receive();
            cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(Reserva) });
            mensaje.Label = "Reserva " + numero + 1;
            mensaje.Body = reservaAnotarse;
            cola.Send(mensaje);

        }


        public Reserva RecibirReserva()
        {

            //recive
            if (!MessageQueue.Exists(rutaCola))
                MessageQueue.Create(rutaCola);
            MessageQueue cola2 = new MessageQueue(rutaCola);
            cola2.Formatter = new XmlMessageFormatter(new Type[] { typeof(Reserva) });
            Message mensaje2 = cola2.Receive();
            Reserva nota2 = (Reserva)mensaje2.Body;

            return nota2;
        }
    }
}
